package simri.mensagem;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import simri.sensor.LeituraSensor;
import simri.sensor.Sensor;
import simri.sensor.TipoSensor;

public class Mensagem {
	
	private String ip;
	
	private int operacao;
	
	private int tipo;
	
	private String msg;
	
	private String sSplit[];
	
	private Sensor sensor;
	
	private LeituraSensor leitura;
	
	private List<List<String>> tabelaAq = null;
	
	public Mensagem(){
		ip = "";
		operacao = 0;
		sensor = new Sensor();
		leitura = new LeituraSensor();
		this.msg = "";
	}
	
	public Mensagem(String msg){
		ip = "";
		operacao = 0;
		sensor = new Sensor();
		leitura = new LeituraSensor();
		this.msg = msg;
	}
	
	public void splitMensagem(){
		sSplit = msg.split("\\;");
	}
	
	public void montarTabelaAq(String sLeitura){
		//LeituraSensor lt = new LeituraSensor();
		sSplit = sLeitura.split("\\;"); 
		if (tabelaAq == null){
			tabelaAq = new ArrayList<List<String>>();
		}
			//lt.setIdLeitura(Integer.parseInt(s[0].trim()));
			//lt.setIdSensor(Integer.parseInt(s[1].trim()));
			//lt.setValorLeitura(lt.getValorLeitura() + s[2].trim());
			//lt.setDataLeitura(Timestamp.valueOf(s[3].trim()));
		if(sSplit.length==4){	
		ArrayList<String> linha = new ArrayList<String>();
		linha.add(sSplit[0].trim());
		linha.add(sSplit[1].trim());
		linha.add(sSplit[2].trim());
		linha.add(sSplit[3].trim());
			
			tabelaAq.add(linha);
		}
		
	}
	
	public void montarTabelaSn(String sLeitura){
		//LeituraSensor lt = new LeituraSensor();
		sSplit = sLeitura.split("\\;"); 
		if (tabelaAq == null){
			tabelaAq = new ArrayList<List<String>>();
		}
			
		if(sSplit.length<=5){	
		ArrayList<String> linha = new ArrayList<String>();
		linha.add(sSplit[0].trim());
		linha.add(sSplit[1].trim());
		linha.add(sSplit[2].trim());
		linha.add(sSplit[3].trim());
		if(sSplit.length==5){
			linha.add(sSplit[4].trim());
		}
			
			tabelaAq.add(linha);
		}
		
	}
	
	public void montarMsgTabela(LeituraSensor lt){
		
		String str= lt.getIdLeitura()+";";
		
		str= str+lt.getIdSensor()+";";
		
		str= str+lt.getValorLeitura().trim()+";";
		
		str= str+lt.getDataLeitura().toString();
	}
	
	public void splitMsgL(String strs[]){
				
		tipo = Integer.parseInt(strs[2].trim());
		leitura.setIdLeitura(1+Integer.parseInt(strs[3].trim()));
		leitura.setIdSensor(Integer.parseInt(strs[4].trim()));
		leitura.setValorLeitura(leitura.getValorLeitura() + strs[5].trim());
		leitura.setDataLeitura(Timestamp.valueOf(strs[6].trim()));
		
	}
	
	public String joinMsg(LeituraSensor lt, int tipo){
		
		String str = operacao+";"+ip+";"+tipo+";";//operacao;ip;tipo;idleitura;idsensor;valor;data
		
		str= str+lt.getIdLeitura()+";";
		
		str= str+lt.getIdSensor()+";";
		
		str= str+lt.getValorLeitura().trim()+";";
		
		str= str+lt.getDataLeitura().toString();
		
		return str;
	}
	
	public String joinMsg(Sensor sn, int tipo){
		
		String str = operacao+";"+ip+";"+tipo+";";//operacao;ip;tipo;idleitura;idsensor;valor;data
		
		str= str+sn.getIdSensor()+";";
		
		str= str+sn.getNomeSensor().trim()+";";
		
		str= str+sn.getTipoSensor().getNomeTipo().trim()+";";
		
		str=str+sn.getLocalInstalacao().trim()+";";
		
		str=str+sn.getDescricao().trim();
		
		return str;
	}
	
	public void splitMsg(){
		
		
		String s[] = msg.split("\\;"); 
		
		operacao = Integer.parseInt(s[0].trim());
		ip = ip + s[1].trim();
		
		switch (operacao){
        case 1: splitMsgS(s);break;
        case 2: splitMsgL(s);break;
        case 3: splitMsgL(s);break;
        case 4: splitMsgS(s);break;
		}
		
	}
	
	public void splitMsgS(String strs[]){
		
		tipo = Integer.parseInt(strs[2].trim());
		
		TipoSensor ts = new TipoSensor();
		if(strs.length >= 4)sensor.setIdSensor(Integer.parseInt(strs[3].trim()));
		if(strs.length >= 5)sensor.setNomeSensor(sensor.getNomeSensor() + strs[4].trim());
		if(strs.length >= 6)ts.setNomeTipo(ts.getNomeTipo() + strs[5].trim());sensor.setTipoSensor(ts);
		if(strs.length >= 7)sensor.setLocalInstalacao(sensor.getLocalInstalacao() + strs[6].trim());
		if(strs.length >= 8)sensor.setDescricao(sensor.getDescricao() + strs[7].trim());
		
		
	}
	
	public String joinMsg(Sensor sn){
		
		String str = operacao+";"+ip+";";
		
		str= str+sn.getIdSensor()+";";
		
		str= str+sn.getNomeSensor().trim()+";";
		
		str= str+sn.getTipoSensor().getNomeTipo().trim()+";";
		
		str=str+sn.getLocalInstalacao().trim()+";";
		
		str=str+sn.getDescricao().trim();
		
		return str;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public int getOperacao() {
		return operacao;
	}

	public void setOperacao(int operacao) {
		this.operacao = operacao;
	}

	public Sensor getSensor() {
		return sensor;
	}

	public void setSensor(Sensor sensor) {
		this.sensor = sensor;
	}
	
	public LeituraSensor getLeitura() {
		return leitura;
	}

	public void setLeitura(LeituraSensor leitura) {
		this.leitura = leitura;
	}

	public List<List<String>> getTabelaAq() {
		return tabelaAq;
	}

	public void setTabelaAq(List<List<String>> tabelaAq) {
		this.tabelaAq = tabelaAq;
	}

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

}
